﻿using System.Collections.Generic;
using System.Threading;
using DimensionsHelper.Common.Contracts.DataCollector.Options;
using DimensionsHelper.Common.Contracts.Excel;

namespace DimensionsHelper.Common.Contracts.DataCollector;

public interface ICollector : IProjectBase<CollectorOptions>
{
    /// <summary>
    ///     使用的Excel读取器。
    /// </summary>
    IExcelReader Reader { get; set; }

    /// <summary>
    ///     使用的Excel写入器。
    /// </summary>
    IExcelWriter Writer { get; set; }

    /// <summary>
    ///     收集指定文件的数据
    /// </summary>
    /// <param name="files">带有数值索引的文件路径列表</param>
    void Collect(IEnumerable<CollectorInputFile> files);

    /// <summary>
    ///     收集指定文件的数据，并且可以中途取消。
    /// </summary>
    /// <param name="files">带有数值索引的文件路径列表</param>
    /// <param name="cancellationToken">Task使用<see cref="CancellationToken" /></param>
    void Collect(IEnumerable<CollectorInputFile> files, CancellationToken cancellationToken);

    /// <summary>
    ///     将已收集的数据输出到指定路径的文件中，
    ///     如果文件已存在，应当替换已有文件。
    /// </summary>
    /// <param name="destination">指定输出的电子表格</param>
    void Export(IExcelWorkbookOperator destination);

    /// <summary>
    ///     将已收集的数据输出到指定路径的文件中，并且可以中途取消。
    ///     如果文件已存在，应当替换已有文件。
    /// </summary>
    /// <param name="destination">指定输出的电子表格</param>
    /// <param name="cancellationToken">给定线程的<see cref="CancellationToken" /></param>
    void Export(IExcelWorkbookOperator destination, CancellationToken cancellationToken);

    /// <summary>
    ///     清空已读取的内容。
    /// </summary>
    void Clear();
}